100REM ******************************
110REM * NET OTHELLO FOR FUJINET    *
120REM * TWO ADAMS, TCP PORT 6502   *
130REM ******************************
140TEXT:HOME
150DIM b(7,7),dx(7),dy(7)
160FOR i=0 TO 7:READ dx(i),dy(i):NEXT i
170DATA -1,-1,0,-1,1,-1,-1,0,1,0,-1,1,0,1,1,1
180INPUT "YOUR NAME? ";p$
190? "HOST TO CALL, OR JUST RETURN"
200INPUT "TO WAIT FOR A CALL? ";h$
210IF h$="" THEN 260
220? "CALLING ";h$;"..."
230 u$="N:TCP://"+h$+":6502/"
240NOPEN 1,u$,12,0
250 my=2:GOTO 310
260? "WAITING ON PORT 6502..."
270NOPEN 1,"N:TCP://:6502/",12,0
280NSTATUS 1,bw,cn,er
290IF cn=0 THEN 280
300NACCEPT 1: my=1
310 m$=p$:GOSUB 9000
320GOSUB 9100: o$=r$
330 c$="WHITE":IF my=1 THEN  c$="BLACK"
340? "YOU PLAY ";c$;" AGAINST ";o$
350? "COLS AND ROWS ARE 1-8, FROM"
360? "THE TOP LEFT. BLACK IS FIRST."
370INPUT "PRESS RETURN TO PLAY. ";a$
400REM ----- NEW GAME -----
410FOR r=0 TO 7:FOR c=0 TO 7: b(c,r)=0:NEXT c:NEXT r
420 b(3,3)=2: b(4,4)=2: b(3,4)=1: b(4,3)=1
430 t=1
440GOSUB 7200
450REM ----- ONE TURN -----
460GOSUB 8300:HOME
470? "BLACK:";s1;" WHITE:";s2
480 p=t:GOSUB 8200
490IF m=1 THEN 550
500 p=3-t:GOSUB 8200
510IF m=0 THEN 700
520IF t=my THEN ? "YOU MUST PASS."
530IF t<>my THEN ? o$;" MUST PASS."
540FOR i=1 TO 2000:NEXT i:GOTO 660
550IF t<>my THEN 620
560REM ----- MY MOVE -----
570INPUT "MOVE (COL,ROW)? ";c,r
580 c=c-1: r=r-1
590IF c<0 OR c>7 OR r<0 OR r>7 THEN 570
600 p=t: fl=0:GOSUB 8000
605IF v=0 THEN ? "ILLEGAL.":GOTO 570
610 fl=1:GOSUB 8000: b(c,r)=t
615 m$=STR$(c)+STR$(r):GOSUB 9000:GOTO 650
620REM ----- THEIR MOVE -----
625? "WAITING FOR ";o$;"..."
630GOSUB 9100
635 c=VAL(MID$(r$,1,1)): r=VAL(MID$(r$,2,1))
640 p=t: fl=1:GOSUB 8000: b(c,r)=t
650GOSUB 7000
660 t=3-t:GOTO 450
700REM ----- GAME OVER -----
705FOR i=1 TO 3000:NEXT i
710GOSUB 8300:TEXT:HOME
720? "GAME OVER!"
730? "BLACK:";s1;" WHITE:";s2
740 sm=s2: so=s1:IF my=1 THEN  sm=s1: so=s2
750IF sm>so THEN ? "YOU WIN, ";p$;"!"
760IF sm<so THEN ? o$;" WINS."
770IF sm=so THEN ? "A TIE."
780INPUT "PLAY AGAIN (Y/N)? ";a$
790 m$=LEFT$(a$,1):GOSUB 9000
800? "ASKING ";o$;"..."
810GOSUB 9100
820IF LEFT$(a$,1)="Y" AND r$="Y" THEN 400
830NCLOSE 1
840? "GOODBYE!"
850END
7000REM ----- DRAW ALL 64 CELLS -----
7010FOR r=0 TO 7:FOR c=0 TO 7
7020 z=12:IF b(c,r)=1 THEN  z=0
7030IF b(c,r)=2 THEN  z=15
7040COLOR=z: x=3+c*4: y=3+r*4
7050FOR i=0 TO 2:HLIN x,x+2 AT y+i:NEXT i
7060NEXT c:NEXT r
7070RETURN
7200REM ----- BOARD BACKGROUND -----
7210GR:COLOR=12
7220FOR i=2 TO 34:HLIN 2,34 AT i:NEXT i
7230COLOR=4
7240FOR i=0 TO 8
7250HLIN 2,34 AT 2+i*4:VLIN 2,34 AT 2+i*4
7260NEXT i
7270GOSUB 7000
7280RETURN
8000REM ----- TRY C,R FOR P -----
8010REM FL=1 FLIPS. V=CAPTURES.
8020 v=0:IF b(c,r)<>0 THEN RETURN
8030FOR d=0 TO 7
8040 x=c+dx(d): y=r+dy(d): n=0
8050IF x<0 OR x>7 OR y<0 OR y>7 THEN 8110
8060IF b(x,y)=3-p THEN  n=n+1: x=x+dx(d): y=y+dy(d):GOTO 8050
8070IF b(x,y)<>p OR n=0 THEN 8110
8080 v=v+n:IF fl=0 THEN 8110
8090 x=c+dx(d): y=r+dy(d)
8100FOR k=1 TO n: b(x,y)=p: x=x+dx(d): y=y+dy(d):NEXT k
8110NEXT d
8120RETURN
8200REM ----- CAN P MOVE? M=1 -----
8210 m=0: fl=0
8220FOR r=0 TO 7:FOR c=0 TO 7
8230GOSUB 8000
8240IF v>0 THEN  m=1: c=7: r=7
8250NEXT c:NEXT r
8260RETURN
8300REM ----- COUNT PIECES -----
8310 s1=0: s2=0
8320FOR y=0 TO 7:FOR x=0 TO 7
8330IF b(x,y)=1 THEN  s1=s1+1
8340IF b(x,y)=2 THEN  s2=s2+1
8350NEXT x:NEXT y
8360RETURN
9000REM ----- SEND M$ + RETURN -----
9010 m$=m$+CHR$(13)
9020NWRITE 1,m$,LEN(m$)
9030RETURN
9100REM ----- READ LINE INTO R$ -----
9110 r$=""
9120NSTATUS 1,bw,cn,er
9130IF bw=0 AND cn=0 THEN 9500
9140IF bw=0 THEN 9120
9150NREAD 1,a$,1
9160IF a$=CHR$(13) THEN RETURN
9170 r$=r$+a$:GOTO 9120
9500REM ----- CONNECTION LOST -----
9510TEXT:HOME:? o$;" HUNG UP."
9520NCLOSE 1:END
